package com.runda.service;

import java.util.List;
import java.util.Map;
import java.util.Set;

import com.bbjob.model.QueChoice;
import com.bbjob.model.QueChoiceAnalysis;
import com.bbjob.model.QueChoiceitem;
import com.bbjob.model.QueOperation;
import com.bbjob.model.QueOperationAnalysis;
import com.bbjob.model.QuestionBank;
import com.bbjob.util.service.IService;
import com.github.pagehelper.PageInfo;

public interface IQuestionBankService extends IService<QuestionBank> {

	List<QuestionBank> selectByExamId(Integer id);

	/**
	 * 获取私有试卷(根据userid获取相应权限)
	 * 
	 * @param name
	 *            试卷名字过滤
	 * @param userid
	 *            用户id
	 * @param page
	 * @param size
	 * @return
	 */
	public PageInfo<QuestionBank> getBank(Integer type, String name, Integer difficulty, Integer userid, Integer page,
			Integer size);

	/**
	 * 获取公共试卷
	 * 
	 * @param name
	 *            试卷名字过滤
	 * 
	 * @param type
	 *            19python 20c 21office1 22office2
	 * @param userid
	 *            用户id
	 * @param page
	 * @param size
	 * @return
	 */
	public PageInfo<QuestionBank> getFreeBank(Integer type, String name, Integer difficulty, Integer page,
			Integer size);

	/**
	 * 获取私有选择和判断题(根据userid获取权限)
	 * 
	 * @param name
	 *            题干
	 * @param userid
	 *            用户id
	 * @param type
	 *            1选择2判断
	 * @param page
	 * @param size
	 * @return
	 */
	public Map<String, Object> getChoice(String bankid, String tag, String name, Integer type, Integer userid,
			Integer page, Integer size, Integer bankType);

	/**
	 * 获取共有选择和判断题(根据userid获取权限)
	 * 
	 * @param name
	 *            题干
	 * @param userid
	 *            用户id
	 * @param type
	 *            1选择2判断
	 * @param page
	 * @param size
	 * @return
	 */
	public Map<String, Object> getFreeChoice(String bankid, String tag, String name, Integer type, Integer userid,
			Integer page, Integer size, Integer bankType);

	/**
	 * 获取私有主观操作题(根据userid获取权限)
	 * 
	 * @param name
	 *            题干
	 * @param type
	 *            题目类型
	 * @param userid
	 *            用户id
	 * @param page
	 * @param size
	 * @return
	 */
	public Map<String, Object> getOperation(String tag, String bankid, String name, Integer type, Integer userid,
			Integer page, Integer size);

	/**
	 * 获取共有主观操作题(根据userid获取权限)
	 * 
	 * @param name
	 *            题干
	 * @param type
	 *            题目类型
	 * @param userid
	 *            用户id
	 * @param page
	 * @param size
	 * @return
	 */
	public Map<String, Object> getFreeOperation(String tag, String bankid, String name, Integer type, Integer userid,
			Integer page, Integer size);

	/**
	 * 获取组织机构下的试卷
	 * 
	 * @param bank
	 * @return
	 */
	public List<QuestionBank> selectByParams(QuestionBank bank);

	/**
	 * 客户端同步json
	 * 
	 * @param json
	 * @return
	 */
	public int syncQuesbank(String json);

	/**
	 * 根据试卷id获取客观题
	 * 
	 * @param choice
	 * @param page
	 * @param size
	 * @return
	 */
	public PageInfo<QueChoice> getChoiceByBank(QueChoice choice, Integer page, Integer size);

	/**
	 * 根据客观题主键获取详细信息
	 * 
	 * @param Choiceid
	 * @return
	 */
	public List<QueChoiceitem> getItemByChoiceid(String Choiceid);

	/**
	 * 根据试卷id获取主观题
	 * 
	 * @param operation
	 * @param page
	 * @param size
	 * @return
	 */
	public PageInfo<QueOperation> getOperationByBank(QueOperation operation, Integer page, Integer size);

	/**
	 * 删除客观题目
	 * 
	 * @param id
	 * @return
	 */
	public int deleteChoice(Integer userid, String id);

	/**
	 * 删除主观题目
	 * 
	 * @param id
	 * @return
	 */
	public int deleteOperation(Integer userid, String id);

	/**
	 * 删除试卷
	 * 
	 * @param id
	 * @return
	 */
	public int deleteBank(Integer userid, String id);

	/**
	 * 根据传过来的试卷id数组来判断哪些题能用
	 * 
	 * @param ids
	 * @return
	 */
	public Set<String> getAllUsefulQuestionByBank(String ids);

	/**
	 * 分享题库
	 * 
	 * @param ids
	 * @return
	 */
	public int shareQuestionBank(Integer userid, String id);

	/**
	 * 分享题
	 * 
	 * @param type
	 *            1客观2主观
	 * @param id
	 *            题目的id
	 * @return
	 */
	public int shareChoiceOrOperation(Integer type, String id, Integer userid);

	/**
	 * 查看客观题解析
	 * @param id
	 * @return
	 */
	public QueChoiceAnalysis getChoiceAnalysis(String id);

	/**
	 * 查看主观题解析
	 * @param id
	 * @return
	 */
	public QueOperationAnalysis getOperationAnalysis(String id);
}
